//
//  EmoticonTextView.swift
//  EmoticonKeyBoard
//
//  Created by apple on 15/12/27.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

class EmoticonTextView: UITextView {

    //将表情图片转换为表情文本
    func fullText() -> String{
        //获取到属性文本中内容信息
        let attrText = attributedText
        //遍历属性文本的内容
        // *stop 表示结束的指针
        //将属性文本 转换为  文本字符串 方便向服务器中发送
        var strM = String()
        attrText.enumerateAttributesInRange(NSRange(location: 0, length: attrText.length), options: []) { (dict, range, _) -> Void in
            print(dict)
            print("-----")
            print(range)
            if let attachment = dict["NSAttachment"] as? EmoticonTextAttachment {
                //包含附件的属性文本 有图片
                print("有图片")
                strM += attachment.chs ?? ""
            } else {
                //不包含属性文本 没有图片
                print("没有图片")
                let str = (self.text as NSString).substringWithRange(range)
                strM += str
            }
        }
        
        return strM
        
    }
    
    func insertEmoticon(em: Emoticon) {
        if em.isEmpty {
            print("点击空表情")
            return
        }
        
        if em.isDelete {
            //回删
            deleteBackward()
            return
        }
        
        //是emoji 表情
        if em.code != nil {
            //文本替换
            replaceRange(selectedTextRange!, withText: em.emojiStr ?? "")
            return
        }
        
        //程序走到这里 就肯定是 点击的是图片 这个时候 就需要在文本中  显示图片
        let imageText = EmoticonTextAttachment().emoticonTextToImageText(em,font: font!)
        
        //3.1在替换属性文本之前 要记录之前选中的位置
        let range = selectedRange
        //4.将属性文本进行替换
        let strM = NSMutableAttributedString(attributedString: attributedText)
        strM.replaceCharactersInRange(selectedRange, withAttributedString: imageText)
        
        //替换textView的属性文本
        attributedText = strM
        //替换完文本之后 恢复光标
        selectedRange = NSMakeRange(range.location + 1, 0)
        //主动的去调用 协议方法 
        delegate?.textViewDidChange?(self)
    }

}
